home *** CD-ROM | disk | FTP | other *** search
-
- #if FLT_RADIX != 2 && FLT_RADIX != 10
- #if FLT_ROUNDS == 1
- #if DIV_ROUNDS == 1
- y= ldexp((evens+odds)/(evens-odds),m);
- #else
- y= ldexp(odds/(evens-odds) + .5,m+1);
- #endif
- #elif FLT_ROUNDS == 0 /* make it round up */
- y= ldexp((odds*2/(evens-odds)+(odds>0?
- .5*(1+DBL_EPSILON):.5)) + .5, m );
- #else /* just make sure it gets promoted to maximum precision */
- y= ldexp(((long double)evens+odds)/((long double)evens-odds),m);
- #endif
- #else /* undesirable radix, keep intermediate calculation in best zone
- ** pow(radix,n) * frac where .5 <= frac <= 1 */
- y= odds<0?ldexp(odds*2/(evens-odds)+1,m):
- ldexp(odds/(evens-odds)+.5,m+1);
- #endif
-
-